package Ep06_BinaryTree.BT31_0669;

import Ep06_BinaryTree.TreeNode;

/**
 * @author Jimmy Zhan WORKSTATION
 * @date 2023/7/9 17:17
 * 说明：
 */

public class Mine {
    public TreeNode trimBST(TreeNode root, int low, int high) {
        // 终止条件们，但没完全终止，因为在判断一个节点不符合要求的时候不能直接return null
        // 他的子树中可能还存在符合要求的节点
        if (root == null) return null;
        if (root.val < low) {   // 当前节点小于下界，就只考虑右子树
            return trimBST(root.right, low, high);
        } else if (root.val > high) {   // 当前节点大于上界，就只考虑左子树
            return trimBST(root.left, low, high);
        }

        // parent接收递归传上来的结果
        root.left = trimBST(root.left, low, high);
        root.right = trimBST(root.right, low, high);
        return root;
    }
}
